home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / misc / prnf246.zip / PAGINA.DOC < prev    next >
Text File  |  1994-07-11  |  27KB  |  541 lines

  1.  
  2. ______PAGINA                                                            Ver. 3.22
  3.  
  4.  
  5. Purpose: A simple file paginator.  Breaks a continuous ASCII text file into
  6.          page-sized units, using form-feeds (ASCII #12).  Adds headers and
  7.          footers if desired.
  8.  
  9. Format:     PAGINA [[$]filespec [outfilespec [headerfilespec|NONE]
  10.                    [BATCHMODE]]]
  11.  
  12.          If any parameter strings are given, Pagina takes the first one for
  13.          the name of the file to be paginated.  If there are two, the sec-
  14.          ond becomes the name of the output file, and if there's a third,
  15.          it will be the name of the header file to be used.  What you don't
  16.          specify on the command line, Pagina will ask for interactively.
  17.          NUL or NONE gets you pagination without any header at all.
  18.  
  19.          $ before the first filespec tells Pagina to use the file named as
  20.          a list of files.  It will paginate the files named therein, all
  21.          output going to a single file with continuous page numbers.
  22.  
  23.          BATCHMODE runs Pagina without stopping for keyboard inputs, as it
  24.          must if you run it from a batch file.  It makes a fair guess at
  25.          parameters you haven't mentioned, but it's better to specify and
  26.          be sure.
  27.  
  28.          For a quick-&-dirty job, outfilespec can be PRN.
  29.  
  30. Remarks: The point of Pagina is to paginate the kind of ASCII files usually
  31.          used for program documentation and the like.  Most of these files
  32.          contain nothing that isn't printable by a very plain printer, and
  33.          many programs will break them into pages.  Occasionally, however,
  34.          a DOC file will make minimal efforts to provide special effects
  35.               ___________    boldface         like underlining or boldface by using a bare carriage return
  36.          (ASCII #13) without the usual line feed (ASCII #10).  This allows
  37.          overprinting the line with underscores and such to get the special
  38.          effects.  Oddly, most simple paginator programs and many simple
  39.          text editors collapse on such files.  The usual way of reading
  40.          text files treats the CR as the end-of-line marker.  Turbo Pascal
  41.          (readln) and BASIC (LINE INPUT) do this, and they'll divide a
  42.          special effects line into two lines, at least one of which will be
  43.          very odd.  The trick is to read lines up to the LF (line feed),
  44.          treating CR's like any other character, & that's what Pagina does.
  45.  
  46.          The Main complexity in Pagina is the provision for headers and
  47.          footers.  By default, Pagina's header is merely two blank lines,
  48.          and its footer is simply the page number flanked by hyphens in the
  49.          center of line 64, under at least three blank lines.  To specify
  50.          any other header, you must make a header file.  Unless you specify
  51.          a header file in the command line, Pagina will look all over the
  52.          DOS path for a file with the name PAGINA.HDR.  If it can't find
  53.          that, it looks for PXL.HDR.[1]  Even if it finds one of these,
  54. -----------
  55.  
  56.  
  57. 1. Pagina's header scheme was lifted originally from PXL, a Turbo Pascal
  58.    cross-reference and lister I wrote and have been maintaining for some
  59.    years.  If you use PXL and like your PXL.HDR file, just keep its direc-
  60.    tory on the path, and Pagina will use it, too.
  61. ______PAGINA                                                               Page 2
  62.  
  63.  
  64.          however, it stops to show you what it's found, and you get a
  65.          chance to give it something else.  On the disk with Pagina, you
  66.          should find two header files.  PAGINA.HDR is a simple alternative
  67.          to the default: it gives no footer at all and simple one-line
  68.          header.  The name of the file appears at the left and on the right
  69.          is the file's date on page one and the page number on subsequent
  70.          pages.  Also you should find XXX.HDR.  It's a heavily commented
  71.          demonstration of some of the header and footer features.  It'll
  72.          work, but you really wouldn't want to use it.
  73.  
  74.          If you want to paginate a set of text files with one continuous
  75.          set of page numbers, make a list of them in a file, one filename
  76.          per line, in the order you want them placed.  Put a $ in front of
  77.          the file spec, and give it to Pagina instead of the name of the
  78.          file to paginate.  Thus:
  79.  
  80.             PAGINA B:STORY.TXT C:STORY.PRN ALT
  81.  
  82.          tells Pagina to paginate B:STORY.TXT, put the paged output in
  83.          B:STORY.PRN, using the header in ALT.HDR.
  84.  
  85.             PAGINA $B:STORY.LST C:STORY.PRN ALT.HDR
  86.  
  87.          says to paginate all the files named in B:STORY.LST, put the
  88.          output in C:STORY.PRN, etc.
  89.  
  90.          In a file list, you can put a title for each file on the same line
  91.          with it, separated from the file name by at least one space.  This
  92.          has two effects:
  93.  
  94.           1. Wherever you've put .Fn in your headers and footers, the title
  95.              will be used instead of the file name.
  96.  
  97.           2. At the end of the output files, Pagina will put a table of
  98.              contents, listing the titles and page numbers.  The first file
  99.              will always be listed as starting at page 1.  Pagina assumes
  100.              that if you've called for unnumbered pages, the real beginning
  101.              of the text comes on whatever you're calling page 1.
  102.  
  103.          In TITLES.HDR, I've put a sample header which shows a way to make
  104.          a set of files print out as chapters.
  105.  
  106.          If you give one file a title, you must give them all titles.  If
  107.          one but not all of the files have titles, Pagina will stop and
  108.          complain.  If one or more of the files in the list can't be found,
  109.          Pagina will inform you and ask whether to continue.  If you say
  110.          yes, it will process what it can find.
  111.  
  112.          If you give it a bare file name, Pagina will hunt all over the DOS
  113.          path.  Given a complete file spec (with drive & directory) and for
  114.          file specs in a $FILELIST, Pagina will search only where directed.
  115.  
  116.          Pagina is meant to neaten up unpaginated files you found on some-
  117.          body else's disk.  It's formatting capabilities are less sophis-
  118.          ticated than a real word-processor's, and it should be used with
  119.          caution if at all on a file that's already paginated.  CountPgs
  120. ______PAGINA                                                               Page 3
  121.  
  122.  
  123.          will tell you if the file already has any FF's.  If Pagina finds
  124.          any in the file it will respect them and start a new page at that
  125.          point.  In the normal case there's a certain amount of text be-
  126.          tween FF's (whether Pagina's or already in the text), and Pagina
  127.          will add its headers and footers.  If there's no text between FF's
  128.          (blanks, tabs, CR's and LF's don't count), Pagina will preserve
  129.          the FF's and include them in the page count, but it won't make
  130.          headers.  The theory is that FF's back to back call for completely
  131.          blank pages like the ones Pagina makes on the .HBPA instruction.
  132.          to even up index, title page &c.  (See page 6, below about .BPA
  133.          instructions.)
  134.  
  135.          Frankly, the presence of FF's usually means either that the file
  136.          is already Paginated (so skip Pagina altogether) or it's been
  137.          bungled, and you'd better look at it and do some editing.  Con-
  138.          ceivably, you might get away with just stripping the FF's out with
  139.          Mangler.  In a really drastic case, you can get Mangler to remove
  140.                                                 ____         the headers and footers altogether and then strip the FF's.
  141.  
  142. ______PAGINA                                                               Page 4
  143.  
  144.  
  145.                          _________________________                         How to Write Header Files
  146.  
  147. If you wish to write your own header files, here are the rules: A header
  148. (or footer --I'll just say "header" when I mean both) can have up to five
  149. lines.  Each header line has three segments which must be separately spec-
  150. ified.  Each segment specifier has five parts:
  151.  
  152.  1. { (opening brace)
  153.  
  154.  2. One of the following symbols:
  155.  
  156.                  _         .HnL  = Left side of Header line #n
  157.                  _         .HnC  = Center of Header line #n
  158.                  _         .HnR  = Right side of Header line #n
  159.                  _         .HnN  = No header line number #n
  160.                  _         .HN   = No header at all
  161.          .H@filespec = The entire contents of the file named will be printed
  162.                  at the bottom of the header specified before this line.
  163.          .H@@filespec = Same as .H@filespec but takes effect starting on
  164.                  page 2.  (No, .H@@@ doesn't postpone it to p. 3.)
  165.                  _      _         .HW   = Header Width in characters; should match widest line in
  166.                  the text.  Default is 79.
  167.                            _         .HMnn/nn/nn = set Margins: left margin/header width/paper width
  168.                  _         .HA   = Alternate left & right header segments on odd/even
  169.                  pages for 2-sided print.
  170.                   _    _         .HPLnn = Page Length: print nn lines per page (including headers
  171.                  & footers).  Default is 63.[2]
  172.                                      _     _    _         .HBPAn1,n2,n3... = insert a Blank Page After pages
  173.                  n1, n2, n3...
  174.                        _ _         .HPgn = start Page numbering with n
  175.                          _          _         .HUPn = leave n Unnumbered Pages at the beginning.
  176.                         _         .HTnn = expand Tabs to nn characters.  Default is 8.
  177.  
  178.                                _         .U "xxx"[yyy] = (for "User's Line")  Offer the user a chance to
  179.                  insert a HDR file line at run time.  (Text in "double
  180.                  quotes" following it comes up as default text for the
  181.                  entry.  Text in [square brackets] becomes an explana-
  182.                  tory prompt line. )
  183.  
  184.     "n" of course, stands for a numeral xxx & yyy stand for text.  All the
  185.     other symbols must be upper/lower case exactly as shown.  Wherever .H
  186.     appears, you can put .F to mean "footer" instead of "header".  A, W, M,
  187.     Pnn Pg, PBA, Tnn, UP will have the same effect whether written with .H
  188.     or .F.  @filespec is the exception.  It can be used only in a header
  189.     and only with .H.  .U is the only instruction that doesn't start with
  190.     .H or .F.
  191.  
  192.     .HM will override .HW (retained for compatibility with PXL and earlier
  193.     Paginas).  As a rule, the 2nd parameter, "header width" should match
  194.     the widest normal line in the text, though you may want to allow a
  195.     slight overhang here and there.  The 3rd parameter is optional; it's
  196. -----------
  197.  
  198.  
  199. 2. Because of a bug in some versions, this version will recognize both
  200.    .HPnn and .HPLnn as page length specs.
  201. ______PAGINA                                                               Page 5
  202.  
  203.  
  204.     used only to calculate even-page margins when you're using .HA to al-
  205.     ternate left and right headers for printing on both sides of the paper.
  206.  
  207.     .HT sets tab expansion for tabs found in the text.  Tabs in the header
  208.     text are not expanded.  (Why are you putting tabs in your header?)
  209.  
  210.     .H@filespec is meant for the case of a very large and complex header
  211.     block.[3]  The text in the specified file will be printed flushleft
  212.     against the margin, and no space will be added between it and the text.
  213.     If you want any blank lines there, or any extra left margin, you must
  214.     put them into the header block file yourself.
  215.  
  216.     .H@filepec must be the last item in the .HDR file.  Pagina will ignore
  217.     anything after it.  You can specify other things, even other header
  218.                                                                 ______    lines, footer lines, margins, etc., so long as you put them before the
  219.     .H@filespec instruction.
  220.  
  221.     An extra @ sign in the instruction: .H@@ postpones the use of the block
  222.     header until page 2.  (You can't stretch it further though; .H@@@ won't
  223.     postpone to page 3.)
  224.  
  225.  3. a space.  (That's ONE space.  Spaces after the first become part of the
  226.     text of the header segment.)
  227.  
  228.  4. the text of the header segment.  Within the text, you can use the fol-
  229.     lowing symbols:
  230.  
  231.         .Fn = file name
  232.         .Fd = file date (style: July 4, 1776)
  233.         .Ft = file time (style: 2:25 pm)
  234.         .Pd = present (or printout) date (style: 7/4/76)
  235.         .Pt = present (or printout) time (style: 14:25)
  236.         .Us = "User's string" (from the keyboard at run time)
  237.         .Id = user's ID if found in PXL.ID on the DOS path. (Provided
  238.               here for compatibility with PXL header files.)
  239.          #  = page number (no period)
  240.  
  241.  
  242.     These symbols are case-sensitive.  They must be upper/lower case exact-
  243.     ly as shown.  Note that if you include a .U line or .Us in a header
  244.     string, Pagina will ask you for a string to put in its place.
  245.  
  246.  5. } (closing brace)
  247.  
  248. You can differentiate between headers for the first page and for subsequent
  249. pages.  The first specification for a given segment defines what's to go on
  250. the first page.  A subsequent spec for that segment will be used for other
  251. pages.  Thereafter, specifications simply supersede each other.
  252.  
  253.  
  254. -----------
  255.  
  256.  
  257. 3. The .H@ option was inspired by VIRLIST.TXT, a file which comes with the
  258.    McAfee virus protection programs.  If you've seen it, you understand why
  259.    we need this.
  260. ______PAGINA                                                               Page 6
  261.  
  262.  
  263. To empty a segment (that's previously been filled), put the closing brace
  264. right after the symbol and space: {.H2R} means empty right segment for 2nd
  265. header line.  In general, to empty header lines:
  266.  
  267.                   ___    {.HN} empties all the header lines (i.e., no header).
  268.     {.H2N} empties the second (#2) header line.
  269.     {.H2L} empties left segment of the second header line.
  270.  
  271. Pagina normally puts one blank line above and one blank line below the
  272. header.  To force extra blanks lines below the header, make a blank (not
  273. empty) header segment.  {.H5L   } would do it --note the extra spaces be-
  274. tween L and }.  The first space is eaten, the others become the left seg-
  275. ment of header line 5.  Blank lines above the footer are easier: if the
  276. only instruction for the footer is, say {.F3C - # -} you get a footer with
  277. the page number in the middle of its third line and, perforce, an empty
  278. first and second line above it.  (This, by the way, is the default header.)
  279.  
  280. If you want a literal # (not the page number) in your header, put a back-
  281. slash in front of it: \#.  To put a literal backslash, put two of them: \\.
  282. (This backslash isn't a true literal escape character.  It works only on
  283. itself and #.)
  284.  
  285. To leave some unnumbered pages (for cover page, introduction &c.) before
  286. page 1, {.HUPn} (where n is the number of pages to skip) will do it.  On
  287. the first n pages, any header segment will that contains the # (page num-
  288. ber) symbol will be omitted.  If you're using the $ file list option, un-
  289. numbered pages will be skipped only in the first file listed.
  290.  
  291. Note that this will not affect which pages are reversed by the {.HA} op-
  292. tion.  If the file has a title page and two pages of introduction you don't
  293. want to number, put {.HUP3} into the HDR file.  That will cause the first
  294. three pages (title and two introduction pages) to carry no page numbers.
  295. Numbering begins with the next page, which will carry "Page 1" in the right
  296. header segment.
  297.  
  298. If this file has the {.HA} instruction to reverse alternate pages for
  299. printing on both sides of the paper, that "Page 1" segment will appear on
  300. the left side, because Pagina knows that the second page is an even one,
  301. regardless what number you're printing on it.
  302.  
  303. {.HBPA} ("Blank pages after) allows you to order blank pages inserted after
  304. specified pages.  If you want the title page to have a blank back and the
  305. page marked 1 to be a recto (that is, to appear on the right side of the
  306. book), you need an extra FF at the end of the title page, and .HBPA1 would
  307. do that.  Say the file has a title page followed immediately by a one page
  308. table of contents, followed by page 1 of the text.  You need an extra FF
  309. after the title page, of course, but that will put page 1 to the back of
  310. the table of contents.  To make the contents and page 1 both appear as
  311. normal recto (right-hand side) pages, you need an extra FF after the title
  312. page and another after the contents.  .HBPA1,3 will do that for you.  (Note
  313. that the inserted blanks are counted as pages.)
  314.  
  315. .HBPA and .HUP are cumbersome ways of doing things more easily done with a
  316. text editor.  They're included in Pagina in case the file you want to pag-
  317. inate contains bare CR's your text editor can't handle.
  318. ______PAGINA                                                               Page 7
  319.  
  320.  
  321. Adding Header Strings at Run-time
  322.  
  323. If you want to make a single standard .HDR file to do for most of your pa-
  324. ginations, there are a few things like margins and header width you might
  325. want to change to fit the particular file you're printing.  Pagina has two
  326. ways to make a file do that: you can insert .U (U for "user") lines in the
  327. HDR file, and you can put a .Us symbol in any header segment string.  If
  328. you put one of these in your HDR file, Pagina will ask you at run time for
  329. a string to put in its place.  If you're combining several files into one
  330. with the $ option, you'll be asked only once; if you put .Us in several
  331. segments, you get the same string in all of them.  You can put other text
  332. and symbols (.Fn, .Pd, Pgn &c.) in the string.  (If you try to put .Us in
  333. the string, an error condition occurs, and the whole string is canceled.)
  334. The full syntax for these goes like this:
  335.  
  336.    {.U "xxx"[yyy]}
  337.  
  338.    .Us "xxx"[yyy]
  339.  
  340. where xxx in "double quotes" is a default string; it will pop up, and you
  341. can accept it with one <Enter> or overwrite it.  yyy in [square brackets]
  342. will be displayed as an explanatory prompt.  If there's no "xxx" string
  343. there's no default.  If there's no [yyy] string, you'll get a default
  344. prompt.
  345.  
  346. The two forms of user string are slightly different:
  347.  
  348. .U  accepts a line like any other line in the HDR file.  Anything you can
  349.     put on a line in the HDR file, you can enter for a .U line.  If you
  350.     wish, you can put several complete segment specs -- complete with
  351.     {curly brackets} -- when the .U line comes up at run time.
  352.  
  353.     You can put as many .U lines in a HDR file as you like.
  354.  
  355. .Us is intended for strings that will become part of an already specified
  356.                                ___    header segment.  Well, you can put a complete segment spec into such a
  357.     string, but you can put only one, and it will wipe out anything else
  358.     specified for the segment.[4]
  359.  
  360.     You can put .Us as many times as you like, you can even have several in
  361.     one header segment, but you'll be asked to enter text for it only once,
  362.     and that text will replace .Us wherever it occurs in the headers and
  363.     footers.
  364.  
  365. If you run Pagina with the BATCHMODE switch in, it doesn't stop for input
  366. from the keyboard.  If the header contains {.U or .Us strings, they'll get
  367. their default ("xxx") values.
  368.  
  369.  
  370.  
  371.  
  372.  
  373. -----------
  374.  
  375.  
  376. 4. That's a bug, but I'm trying to make it sound like a feature.
  377. ______PAGINA                                                               Page 8
  378.  
  379.  
  380. Headers for Consecutive Pagination:
  381.  
  382. The idea of the $ option to paginate a list of files is that the successive
  383. files are something like chapters in a book.  If you use this option, you
  384. have to use the same header for the whole run, but each time a file comes
  385. up, Pagina will
  386.  
  387.  1. Rebuild the header to make the file name, file date, &c match the cur-
  388.     rent file.  You won't be asked for a new .Us user string.
  389.  
  390.  2. Begin with the first page header again, and start the new file on a
  391.     fresh page.  Even if your header contains .HUPn or .HBPA, it will leave
  392.     unnumbered pages and insert blank pages only in the first file (unless
  393.     you've called for .HBPA with page numbers that turn up in the
  394.     subsequent files).
  395.  
  396. If you prefer to paginate the files separately, you can use the .HPgn in-
  397. struction to start page numbering at any number you like.  If you like,
  398. this instruction can be put in a user's string with the .Us symbol.  You
  399. can put other things in, too:
  400.  
  401.    {.HPg5Woldery Wine}
  402.  
  403. in a user's string (or a normal header segment), will get you "Woldery
  404. Wine"; the ".HPg5" will be obeyed, but not printed.  You can tell what you
  405. need from the "Pages" display on Pagina's billboard; it shows the numbers
  406. actually put on the pages, not the true number of pages.
  407.  
  408.  
  409. If You Don't Want Headers:
  410.  
  411. You can kill the header by entering NONE or a couple of blanks when asked
  412. for a header file name, or you can specify NONE on the command line.  In
  413. addition, a header file completely replaces the standard default header.
  414. If you don't want a default header at all -- not ever -- make a PAGINA.HDR
  415. file that contains no header instructions.  A zero-byte file will do.  So
  416. long as that's on the path, Pagina will make no headers on its own.
  417.  
  418.  
  419. If You Also Use PXL:
  420.  
  421. As mentioned above, Pagina can read and obey any header instruction found
  422. in a PXL header file.  PXL will also read and obey header and Pagination
  423. instructions in the body of the file being Paginated.  Pagina will not.
  424.  
  425.  
  426. A Note About Colors:
  427.  
  428. PrnSet (2.80 and later) has an option to customize its colors.  (From Prn-
  429. Set's main menu, press F3.)  If PAGINA.EXE is on the default drive\direc-
  430. tory when you run PrnSet's color changer, it will change Pagina's colors,
  431. too.
  432.  
  433. Lacking a copy of PrnSet, if you know how to use DEBUG or a disk editor
  434. (like Peter Norton's NU), you can change the bytes in the file directly.
  435.                                  ___________Search for the flag, "COLORS:".  Immediately after the colon are 4 bytes
  436.  
  437. ______PAGINA                                                               Page 9
  438.  
  439.  
  440. specifying colors, in this order: Normal, Emphasized, Frame, and Reversed.
  441. I often set them up thus: (in hex numbers): 02 0E 60 70 for green-on-black,
  442. yellow-on-black, black-on-brown, black-on-white.
  443.  
  444.  
  445. _______________Version History
  446.  
  447. 2.00 (5/89) adds two ways to handle multiple files:
  448.  
  449.          $FILELIST option to combine several text files into one, con-
  450.          secutively numbered file.
  451.  
  452.          .HPgn option to allow page numbering to start with any (posit-
  453.          ive) number you please.
  454.  
  455.       Interactive file requests allow confirmation of requests.
  456.  
  457.       2.01 (6/89) adds the NONE option to call for no header.
  458.  
  459.       2.02 (6/89) minor aesthetic improvements.
  460.  
  461. 2.10 (6/89) accepts wildcards in the filespec.
  462.  
  463.       2.11, (7/89) adds margin setting (.HMnn/nn/nn) and the backslash
  464.       literal for putting # in a header.
  465.  
  466.       2.12, (9/89) repairs bug with header file when working from a
  467.       $FILE.LST
  468.  
  469.       2.13, (12/89) expands tabs in the text to width set by .HTnn (the
  470.       default is 8).  Incredibly, it appears I've had that .HT tab width
  471.       command in place for many versions, but never implemented the ac-
  472.       tual expansion.  2.13d corrects a bug in the path-searching routine.
  473.  
  474. 2.20 (1/90) Adds two instructions:
  475.  
  476.         .UPn to leave n pages unnumbered at start of file.
  477.  
  478.         .BPAn1,n2... to insert a Blank Page After pages n1, n2 &c.
  479.  
  480.       Bug fixes: Pagina was refusing to accept output file name interact-
  481.       ively.  2.20a fixes another: should now leave the cursor alone on a
  482.       VGA.  2.20b stops on <Esc>, Ctrl-Break, or Ctrl-C more reliable.
  483.  
  484.       2.21 (4/90) Two refinements: takes better control of FF's found
  485.            in the text, and no longer manufactures an extra page out of
  486.            stray CR's, blanks, or other white space after the final FF.
  487.            2.21a fixes a bug in .HPgnn when working from a $file list.
  488.            2.21b allows longer header lines --up to 255 columns.  2.21c
  489.            fixes the fix in 2.21.  2.21d counts blank lines properly.
  490.  
  491.      2.22 A slight refinement: working interactively, Pagina will
  492.           manufacture and suggest a name for the output file, the same
  493.           file name with extension ".001" or, if the input file exten-
  494.           sion has a numerical value, you get the next higher number,
  495.           ".002", ".003", etc.
  496. ______PAGINA                                                              Page 10
  497.  
  498.  
  499. 2.30 (3/91) improves the user string option in .HDR files.  .U is a new
  500.      option to add a line at run time to the instructions (instead of
  501.      merely some extra text into a header section as .Us does).  Both
  502.      .U and the old .Us option can have explanatory prompts and default
  503.      strings.  This should help in making one basic PAGINA.HDR do for
  504.      many different files.
  505.  
  506. 2.40 (10/91) adds BATCHMODE to permit non-interactive operation.  Someone
  507.      sent me a review which said that these programs can be run from a
  508.      batch file, so I thought I'd better make it true.
  509.  
  510.      2.41  Makes use of a new line-reading function.  If all's well,
  511.            you'll never notice, but changing the version number makes
  512.            it easier to keep track of bugs.
  513.  
  514. 3.00 (8/92) Makes use of that line-reading function properly.  Instead of
  515.      255-character lines, it can now handle lines of up to about 30,000
  516.      characters (including underlining &c added after bare CR's.)
  517.  
  518.      3.01 (10/92) works around Turbo Pascal 6 bug: reset balks at read-only
  519.           non-text files.  Now uses text files where possible and changes
  520.           attribute temporarily where file must be opened as non-text.
  521.           3.01a (12/92) does it better.  No need to fiddle the attributes.
  522.  
  523. 3.10 (2/93) New function: .H@filespec puts the entire text of the speci-
  524.      fied file into the header.  Suggested by Lewis Paper for dealing with
  525.      McAfee's VIRLIST.TXT.  3.10a allows .H@@filespec to postpone use of
  526.      this header until 2nd page.
  527.  
  528. 3.20 (6/93) Titles may now be given to files in a $FILELIST.  The titles
  529.      will substitute for the file name in .Fn header lines.  If titles are
  530.      given, a table of contents will be generated, treating the separate
  531.      files as chapters.
  532.  
  533.      3.21 (7/93) parameter /? gets a syntax help screen.
  534.  
  535.      3.22 (12/93) If a table of contents is being generated and alternat-
  536.           ing headers is in effect, table will begin on an odd page.  Now
  537.           works on 43 & 50 line screens.
  538.  
  539.                                                     R. N. Wisan, July, 1994
  540.                                           37 Clinton St., Oneonta, NY 13820
  541.                                               internet: wisanr@hartwick.edu